package com.yys.excel.yysexcel.utils;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.yys.excel.yysexcel.common.enums.ErrorStatus;
import com.yys.excel.yysexcel.common.exception.ServiceException;
import com.yys.excel.yysexcel.entity.export.DictVo;
import com.yys.excel.yysexcel.entity.export.StyleVo;
import org.yaml.snakeyaml.Yaml;

/**
 * yaml 工具类
 *
 * @author lys
 * @date 2022/12/6
 */
public class YamlUtil {
    /**
     * 将yaml字符串转为实体类
     *
     * @param data  数据
     * @param clazz clazz
     * @return {@link T}
     */
    public static <T> T yamlToBean(String data, Class<T> clazz) {
        return BeanUtil.toBean(new Yaml().load(data), clazz);
    }

    /**
     * json字符串转为实体类
     *
     * @param data  数据
     * @param clazz clazz
     * @return {@link T}
     */
    public static <T> T jsonToBean(String data, Class<T> clazz) {
        return JSONUtil.toBean(data, clazz);
    }

    /**
     * json字符串 or yaml字符串 转为实体类
     *
     * @param data  数据
     * @param clazz clazz
     * @return {@link T}
     */
    public static <T> T jsonOrYamlToBean(String data, Class<T> clazz) {
        try {
            return jsonToBean(data, clazz);
        } catch (Exception e) {
            return yamlToBean(data, clazz);
        }
    }

    /**
     * @param data 数据
     * @return {@link StyleVo}
     */
    public static StyleVo strToStyleVo(String data) {
        if (StrUtil.isBlank(data)) {
            return null;
        }
        try {
            return jsonOrYamlToBean(data, StyleVo.class);
        } catch (Exception e) {
            throw new ServiceException(ErrorStatus.EXCEPTION.getCode(), "style模板数据转换出错：" + e.getMessage());
        }
    }

    /**
     * @param data 数据
     * @return {@link DictVo}
     */
    public static DictVo strToDictVo(String data) {
        if (StrUtil.isBlank(data)) {
            return null;
        }
        try {
            return jsonOrYamlToBean(data, DictVo.class);
        } catch (Exception e) {
            throw new ServiceException(ErrorStatus.EXCEPTION.getCode(), "dict模板数据转换出错：" + e.getMessage());
        }
    }

    public static void main(String[] args) {
        String data = "{\"title\":{\"CCDZ\":\"存储地址\",\"CCMC\":\"存储名称\",\"WJHZ\":\"文件后缀\",\"WJLX\":\"文件类型\",\"YSMC\":\"原始名称\",\"style\":\"样式\",\"add_time\":\"添加时间\"},\"column\":{\"WJLX\":{\"1\":\"照片\",\"2\":\"文件\",\"3\":\"excel转图片\",\"0\":\"文件or图片\"},\"WJHZ\":{\"jpg\":\"jpg图片\",\"png\":\"png图片\"}}}\n";
        StyleVo styleVo = strToStyleVo(data);
        DictVo dictVo = strToDictVo(data);
        System.out.println(dictVo);
    }
}
